package com.up.cloudfeiyibackend.mapper;

import com.up.cloudfeiyibackend.dto.EventApplicationDto;
import com.up.cloudfeiyibackend.dto.EventPageDto;
import com.up.cloudfeiyibackend.dto.EventSignupDto;
import com.up.cloudfeiyibackend.entity.*;
import com.up.cloudfeiyibackend.vo.EventCategoryVO;
import com.up.cloudfeiyibackend.vo.EventCommentsReplyVO;
import com.up.cloudfeiyibackend.vo.EventCommentsVO;
import com.up.cloudfeiyibackend.vo.EventRegionVO;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface EventMapper {
    /**
     * 分页查询所有非遗活动
     *
     * @param dto
     * @return
     */
    List<Event> page(EventPageDto dto);

    /**
     * 查询所有活动分类
     * @return
     */
    List<EventCategoryVO> getEventCategory();

    /**
     * 根据种类id查询活动数量
     * @param categoryId
     * @return
     */
    Integer getEventCountByCategory(Long categoryId);
    /**
     * 根据活动id查询活动详情
     * @param eventId
     * @return
     */
    Event getEventById(Long eventId);

    /**
     *
     * 活动详情
     * @param eventId
     * @return
     */
    EventDetail getEventDetail(Long eventId);

    /**
     * 报名活动
     * @param
     * @param
     */
    void signUp(EventSignupDto eventSignupDto);

    /**
     * 查询是否重复报名
     * @param eventId
     * @param userId
     * @return
     */
    EventSignup getSignUp(Long eventId, Long userId);


    /**
     *
     * 根据id查询活动是否存在
     * @param eventId
     * @return
     */
    Event getEvent(Long eventId);

    /**
     *
     * 查询用户报名的所有活动
     * @param userId
     * @return
     */
    List<EventSignup> getSignUps(Long userId);

    /**
     *
     * 根据id查询活动报名状态
     * @param eventIds
     * @return
     */
    List<Event> getUserSignUps(List<Long> eventIds);


    /**
     *
     * 查询所有活动区域
     * @return
     */
    List<EventRegionVO> getEventRegions();

    /**
     *
     * 根据父id查询是否有此评论
     * @param parentId
     * @return
     */
    EventComment getEventCommentByCommentId(Long parentId);

    /**
     *
     * 添加评论
     * @param eventComment
     */
    void addEventComment(EventComment eventComment);

    /**
     *
     * 根据id查询评论
     * @param eventCommentId
     * @return
     */
    EventComment getEventCommentByCommentById(Long eventCommentId);


    /**
     *
     * 根据id删除评论
     * @param eventCommentId
     */
    void deleteEventComment(Long eventCommentId);

    /**
     *
     * 获取所有顶级评论
     * @param eventId
     * @return
     */
    List<EventCommentsVO> getAllEventTopComment(Long eventId);

    /**
     *
     * 获取所有评论的回复
     * @param topId
     * @param parentId
     * @return
     */
    List<EventCommentsReplyVO> listReplysByEventId(Long topId, Long parentId);


    /**
     *
     * 根据id删除所有子评论
     * @param eventCommentId
     */
    void deleteAllChildren(Long eventCommentId);


    /**
     *
     * 获取回复评论的内容
     * @param parentId
     * @return
     */
    String getPerentCommentContent(Long parentId);




    /**
     *
     * 申请活动表
     * @param eventApplication
     */
    void EventApplication(EventApplication eventApplication);


    /**
     *
     * 根据用户id查询活动申请
     * @param userId
     * @return
     */
    List<EventApplication> getAllEventApplication(Long userId);

    /**
     *
     * 根据id查询分类名称
     * @param categoryId
     * @return
     */
    String getEventCategoryById(Long categoryId);

    /**
     *
     * 根据id查询区域名称
     * @param regionId
     * @return
     */
    String getEventRegionById(Long regionId);


    /**
     *
     * 获取当前用户所有的评论id
     * @param userId
     * @return
     */
    List<Long> getCommentIdsByUserId(Long userId);


    /**
     *
     * 获取所有回复当前用户评论的评论
     * @return
     */
    List<EventComment> getAllCommentIdsByUserId(Long userId);



    /**
     *
     * 修改这些评论的浏览状态
     * @param
     */
    void updateCommentStatus(List<Long> commentIdList);
}
